import pandas as pd

"""
计算修车时间和运单时间的交叉
"""


def time_ranges_overlap(start1, end1, start2, end2):
    """
    判断两个时间段是否相交

    参数:
    start1 (datetime): 第一个时间段的开始时间
    end1 (datetime): 第一个时间段的结束时间
    start2 (datetime): 第二个时间段的开始时间
    end2 (datetime): 第二个时间段的结束时间

    返回:
    bool: 如果时间段相交返回 True，否则返回 False
    """
    # 一个时间段结束的时间早于另一个时间段开始的时间，则它们不相交
    if end1 <= start2 or end2 <= start1:
        return False
    return True


# 读取Excel表格
table1 = pd.read_excel('车辆维修时间段.xlsx')
table2 = pd.read_excel('临时运单时间段.xlsx')

# 转换时间格式
table1['startTime'] = pd.to_datetime(table1['startTime'])
table1['endTime'] = pd.to_datetime(table1['endTime'])
table2['startTime'] = pd.to_datetime(table2['transDate'])
table2['endTime'] = pd.to_datetime(table2['transenddate'])

# 找出所有的车辆ID
unique_ids = set(table1['vehicleId']).union(set(table2['vehicleId']))

# 存储交叉时间段的结果
results = []

# 遍历每个独特的车辆ID
for vehicle_id in unique_ids:
    # 获取表1中该车辆的时间段
    records1 = table1[table1['vehicleId'] == vehicle_id]
    # 获取表2中该车辆的时间段
    records2 = table2[table2['vehicleId'] == vehicle_id]

    # 遍历表1和表2中的记录，寻找相交时间段
    for _, row1 in records1.iterrows():
        for _, row2 in records2.iterrows():
            # 找到相交的时间段
            # 一个时间段结束的时间早于另一个时间段开始的时间，则它们不相交
            if time_ranges_overlap(row1['startTime'], row1['endTime'], row2['startTime'], row2['endTime'], ):
                results.append([vehicle_id, row1['startTime'], row1['endTime'], row2['startTime'], row2['endTime']])

# 创建结果DataFrame
result_df = pd.DataFrame(results,columns=['车辆id', '维修开始时间', '维修结束时间', '运单开始时间', '运单结束时间'])

# 存储结果到新的Excel
result_df.to_excel('维修时间与运单交叉时间段.xlsx', index=False)

print("交叉时间段已成功输出至 '维修时间与运单交叉时间段.xlsx'。")
